# 只有唯一的实例 第一次使用  类名()创建实例  返回实例  后续直接返回原有的实例
class Manage:
    def __new__(cls, *args, **kwargs):
        """
        构造函数用于  创建实例
        通过父类  的构造函数来创建实例
        :param args:
        :param kwargs:
        """
        instance = super().__new__(cls)
        print(f"创建实例{id(instance)}")
        return instance

    def __init__(self):
        print(f"初始化实例{id(self)}")
        """
        初始化方法  初始化self实例
        """
    def __str__(self):
        """
        一个实例的字符串表示
        """
        return "醒醒啦"

    def __del__(self):
        """
        析构函数： 析构函数用于内存销毁之前的清理工作
        当实例不在被使用， 执行实例的析构函数
        """
        print(f"析构函数执行了")

m1 = Manage()
print(m1)

# class Manage:
#     instance = None
#
#     def __new__(cls, *args, **kwargs):
#         if not Manage.instance:
#             Manage.instance = super().__new__(cls)
#         return Manage.instance

# 任何类继承Manage都成为单例类
#
# m1 = Manage()
# m2 = Manage()
# print(id(m1),id(m2),m1 is m2)
#
# class VlueManage(Manage):
#     pass

vm1 = VlueManage()
vm2 = VlueManage()
print(id(vm1),id(vm2),vm1 is vm2)